/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Controllers;

import Entities.BasisReis;
import Entities.Betaalwijze;
import Entities.Boeking;
import Entities.Klant;
import Entities.Vervoersmiddel;
import Entities.VervoersmiddelType;
import Interfaces.BoekingInterface;
import Interfaces.ZoekenInterface;
import com.sun.xml.rpc.processor.modeler.j2ee.xml.string;
import java.io.IOException;
import java.io.Serializable;
import java.util.List;
import java.util.Map;
import javax.annotation.ManagedBean;
import javax.inject.Named;
import javax.enterprise.context.RequestScoped;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.ViewScoped;
import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;
import javax.inject.Inject;

/**
 *
 * @author dwana
 */
@Named
@ViewScoped
public class ControllerBoeking implements Serializable {

    @Inject
    private BoekingInterface boekingInterface;
    @Inject
    private ZoekenInterface zoekenInterface;
    private int reisid;
    private ControllerInloggen controllerInloggen;
    private Betaalwijze betaalwijze = new Betaalwijze();
    private Boeking boeking;
    private VervoersmiddelType vervoersmiddeltype;

    public ControllerBoeking() {

        controllerInloggen = new ControllerInloggen();

    }

    public Boeking getBoeking() {
        return boeking;
    }

    public void setBoeking(Boeking boeking) {
        this.boeking = boeking;
    }

    public String boekingNaarDetail(Boeking boeking) {
        this.boeking = boeking;
        return "factuurOverzichtDetail.xhtml";
    }

    public String boekingById(int id) {

        boeking = boekingInterface.getBoekingById(id);
        return "factuurOverzichtDetail.xhtml";
    }

    public String setBasisReisID(String id) {
        reisid = Integer.parseInt(id);

        if (reisid != 0) {
        }
        try {
            return "index.xhtml";
        } catch (Exception e) {
            return "error.xhtml";
        }
    }

    public String ga(int id) {

        if (controllerInloggen.getSessieKlant() == null || controllerInloggen.getSessieKlant().getEmail().isEmpty()) {
            return "nietIngelogd.xhtml";
        } else {

            FacesContext context = FacesContext.getCurrentInstance();

            if (context != null) {
                Map<String, Object> sessionMap = context.getExternalContext().getSessionMap();
                if (sessionMap != null) {
                    vervoersmiddeltype = (VervoersmiddelType) sessionMap.get("versmiddeltypeid");
                }
            }

            BasisReis basisreis = (BasisReis) boekingInterface.basisReis(id);
            context.getExternalContext().getSessionMap().put("basisReis", basisreis);

            //goedkoopste vervoersmiddelen bij reis in session steken
            List<Vervoersmiddel> vervoersmiddelen = zoekenInterface.ReturnTweegoedkoopsteVervoersMiddelen(basisreis.getVertrek(), basisreis.getBestemming(), vervoersmiddeltype);
            context.getExternalContext().getSessionMap().put("vervoersmiddelen", vervoersmiddelen);

            if(  vervoersmiddelen == null||vervoersmiddelen.size() <= 0){
             return "error.xhtml";
            }
            else
            {
            return "factuurOverzicht.xhtml";
            }
        }


        /*try {
             
         //
         } catch (Exception e) {
         //fout page
         return "error.xhtml";
         }*/

    }

    public int getReisid() {
        return reisid;
    }

    public void setReisid(int reisid) {
        this.reisid = reisid;
    }

    public List<Boeking> historyBoekingByKlant(Klant klant) {

        return boekingInterface.getBoekingenByKlant(klant);
    }
    /*public List<Betaalwijze> getControllerBoekingFromBusinessLayer(){ 
     return boekingInterface.betaalwijzen();
     }
    
     public Betaalwijze getBetaalwijze() {
     return betaalwijze;
     }

     public void setBetaalwijze(Betaalwijze betaalwijze) {
     this.betaalwijze = betaalwijze;
     }
    
     public String updateRedirect(Betaalwijze betaalwijze)
     { 
     this.setBetaalwijze(betaalwijze);   
     return "detailBetaalwijze.xhtml";
     }
     public String update(Betaalwijze betaalwijze)
     { 

     this.setBetaalwijze(betaalwijze); 
     boekingInterface.update(this.betaalwijze);
     return "betaalwijzeOverzicht.xhtml";
     }
     public String delete(Betaalwijze betaalwijze)
     { 
     boekingInterface.delete(betaalwijze);
     return "betaalwijzeOverzicht.xhtml";
     }*/
}
